﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Puerts
{
    //放置配置的类
    [AttributeUsage(AttributeTargets.Class)]
    public class ConfigureAttribute : Attribute
    {

    }

    //代码生成目录
    [AttributeUsage(AttributeTargets.Property)]
    public class CodeOutputDirectoryAttribute : Attribute
    {
    }

    //要在ts/js里头调用，必须放在标记了Configure的类里
    [AttributeUsage(AttributeTargets.Property)]
    public class BindingAttribute : Attribute
    {
    }

    //相比Binding，这标签仅生成ts声明
    [AttributeUsage(AttributeTargets.Property)]
    public class TypingAttribute : Attribute
    {
    }

    //对blittable值类型通过内存拷贝传递，需要开启unsafe编译选项
    [AttributeUsage(AttributeTargets.Property)]
    public class BlittableCopyAttribute : Attribute
    {

    }

    [AttributeUsage(AttributeTargets.Method)]
    public class FilterAttribute : Attribute
    {
    }

    public enum BindingMode
    {
        FastBinding = 0, // generate static wrapper
        SlowBinding = 1, // not implemented now. dont use
        LazyBinding = 2, // reflect during first call
        DontBinding = 4, // not able to called in runtime. Also will not generate d.ts
    }
}
